<?php

/*
** (c)2012 COMITATO PROVINCIALE DI CATANIA - CROCE ROSSA ITALIANA
*/

class Persona {

	public
		$id, $nome, $cognome,
		$stato, $tipo = 0;
	protected
		$esiste, $db;

	public function __construct ($id = NULL) {
		global $db;
		$this->db = $db;
		if ( $id ) {
			// Carica Persona ID
			$q = "SELECT
				nome, cognome, stato, tipo
			      FROM
				persone
			      WHERE
				id = '$id'";
			$q = $this->db->query($q);
			$q = $this->db->fetch_array($q);
			$this->id = $id;
			$this->nome = $q[0];
			$this->cognome = $q[1];
			$this->stato = (int) $q[2];
			$this->tipo = (int) $q[3];
			$this->esiste = true;
		} else {
			// Azzera i campi, nuovo
			$this->generaId();
			$this->nome = '(nome)';
			$this->cognome = '(cognome)';
			$this->stato = 0;
			$this->esiste = false;
		}
	}

	private function generaId() {
		do {
			$this->id = rand(1000000, 9999999);
		} while ( $this->esisteId() );
	}

	private function esisteId() {
		$q = "persone WHERE id='{$this->id}'";
		return $this->db->conta($q);
	}

	public function __toString() {
		return $this->id;
	}
	
	public function sstampa() {
		$out = $this->nome . ' ' . $this->cognome;
		return $out;
	}

	public function stampa() {
		echo $this->sstampa();
	}

	public function salva() {
		$id = $this->id;
		$nome = $this->db->escape($this->nome);
		$cognome = $this->db->escape($this->cognome);
		$stato = (int) $this->stato;
		$tipo = (int) $this->tipo;
		if ( $this->esiste ) {
			// UPDATE
			$q = "UPDATE persone SET
				nome = '$nome', cognome = '$cognome',
				stato = $stato, $tipo = $tipo
			      WHERE id = '$id'";
		} else {
			// INSERT
			$q = "INSERT INTO persone
				(id, nome, cognome, stato, tipo)
				 VALUES
				('$id', '$nome', '$cognome', $stato, $tipo)";
		}
		return $this->db->query($q);
	}

	// Quando chiamo $persona->nomeProprieta;
	public function __get( $nomeProprieta ) {
		$p = new Proprieta($this, $nomeProprieta);
		if ( count($p->valore) == 1 ) {
			return $p->valore[0];
		} else {
			return $p->valore;
		}
	}

	// Quando imposto: $persona->nomeProprieta = nuovoValore.
	public function __set ( $nomeProprieta, $nuovoValore ) {
		$p = new Proprieta($this, $nomeProprieta);
		if ( is_array($nuovoValore) ) {
			$p->valore = $nuovoValore;
			$p->salva();
		} elseif ( $nuovoValore == NULL ) {
			$p->azzera();
		} else {
			$p->valore = array($nuovoValore);
			$p->salva();
		}
	}

	// Carica da POST
	public function caricaPOST ( $nomeCampo ) {
		global $_POST;
		$valore = $_POST[$nomeCampo];
		if (empty($valore)) {
			return false;
		}
		$this->{$nomeCampo} = $valore;
	}
}
